UIテストフレームワークCalabash-iOSを試す〜導入編〜
iOS向けのテストツール(主にUIテスト)を探していたところ、Calabash-iOSがすごくいいという記事を見つけました。
- VOYAGE GROUP エンジニアブログ : iOSの究極テストツール:Calabash-iOSを使いこなすぞ!(1)
- VOYAGE GROUP エンジニアブログ : iOSの究極テストツール:Calabash-iOSを使いこなすぞ!(2)
Calabash-iOSとは
Calabash-iOSはオープンソース(Eclipse Public License 1.0)のBDD系UIテストフレームワークです。Calabash-iOSのREADMEを見てみると、「AndroidとiOSのネイティブとハイブリッドアプリケーションのための自動テスト技術です」と書かれています。しかも上で紹介した記事で書かれている通り、シミュレータと実機の両方でテストが実行できるとのことです。
また、Calabashではビヘイビア駆動開発(BDD:Behaviour Driven Development)のツールとして有名なCucumberを使用しているので、テストコードはCucumberの書き方で書ける、すなわち自然言語にかなり近い形で書けます!今までExcelなどで書いていたテストケースをある程度流用することも可能です。
で、Calabash-iOSについての情報を探してみたところあまり見つからなかったので、導入から使い方までを紹介していきたいと思います。今回は導入編です。自分も書きながら覚えていきたいと思います!また、本記事では以下の環境を前提に説明します。
Mac OS X 10.8 Moutain lion
Xcode 4.6.2
iOS SDK 6.1
Calabash-iOSを導入の前に
Xcodeのバージョン確認とCommand Line Toolsのインストール
Calabash-iOSではXcodeは4.3以上が必要です。アップデートしましょう。アップデートしたら、Command Line Toolsをインストールしていなければインストールしましょう。Command Line Toolsは[Xcode>Preferences...]で設定画面を開き、Downloadsをクリックして表示した画面でインストールできます。
Rubyのバージョン確認
Calabash-iOSではgemを利用します。Ruby 1.8.7以上が必要です。以下のRubyのバージョンを確認して、古ければアップデートしましょう。
$ ruby -v
calabash-cucumberのインストール
以下のコマンドを実行して、calabash-cucumberをインストールします。
$ gem install calabash-cucumber
もしエラーが発生したら、コマンドの前にsudoを付けて実行してみましょう。
$ sudo gem install calabash-cucumber
早速使ってみよう!
プロジェクトの作成
それではまず、テスト対象となるXcodeプロジェクトを作成しましょう。XcodeよりSingle View Applicationを選択し、以下の内容でプロジェクトを作成しましょう。
項目 | 設定値 |
---|---|
Product Name | CalabashSample |
Organization Name | 自分の名前(サンプルなのでテキトー) |
Company Identifier | 会社名(サンプルなのでテキトー) |
Class Prefix | なし |
Devices | iPhone |
Use Storyboards | チェックする(ストーリーボードを使用) |
Use Automatic Reference Counting | チェックする(ARC有効) |
Include Unit Tests | チェックしない(unit testのターゲットを含まない) |
Calabash-iOSのセットアップ
プロジェクトを作成したらターミナルを起動し、作成したプロジェクトディレクトリ(.xcodeprojが含まれるディレクトリ)に移動します。
$ cd some/path/CalabashSample
移動したら以下のコマンドを実行します。
$ calabash-ios setup
Xcodeが動いているとエラーになるので、コマンド実行前に予め終了しておいてください!
プロジェクトディレクトリの中にcalabash.frameworkが作成されていればOKです。
スケルトン作成
以下のコマンドを実行してスケルトンを作成します。
$ calabash-ios gen
プロジェクトディレクトリの中にfeaturesが作成されていればOKです。
プロジェクトのビルド
この状態でXcodeを起動すると、以下のようにスキーマとターゲットが作成されているはずです。CalabashSample-calスキーマを選択してプロジェクトをビルドしてください。
テスト実行!
これで準備完了です。あとは以下のコマンドをプロジェクトディレクトリで実行してみましょう。
$ cucumber
すると、シミュレータが起動しターミナルに以下のように表示されます。これでスケルトンで定義されたテストが実行されます。
Feature: Running a test As an iOS developer I want to have a sample feature file So I can begin testing quickly Scenario: Example steps # features/my_first.feature:6 ------------------------------------- Auto detected APP_BUNDLE_PATH: APP_BUNDLE_PATH=/Users/hirai/Library/Developer/Xcode/DerivedData/CalabashSample-hdefbpuucovnxvatciabnozakpoj/Build/Products/Debug-iphonesimulator/CalabashSample-cal.app Please verify! If this is wrong please set it as APP_BUNDLE_PATH in features/support/01_launch.rb ------------------------------------- Waiting for App to be ready Given I am on the Welcome Screen # features/step_definitions/my_first_steps.rb:1 Then I swipe left # calabash-cucumber-0.9.144/features/step_definitions/calabash_steps.rb:211 And I wait until I don't see "Please swipe left" # calabash-cucumber-0.9.144/features/step_definitions/calabash_steps.rb:149 And take picture # calabash-cucumber-0.9.144/features/step_definitions/calabash_steps.rb:206 1 scenario (1 passed) 4 steps (4 passed) 0m7.970s
手動でXcodeに設定する場合
ここまではコマンドラインから自動でCalabash-iOSを設定する方法でしたが、手動で設定することもできます。
Xcodeプロジェクトの設定
まず、プロジェクトにある既存のターゲットからCalabash-iOS用のターゲットを複製します。ターゲットの複製は、複製したいターゲットで右クリックし、[Dupulicate target]を選択します。
すると、以下の確認ダイアログが表示されるので、[Duplicate only]ボタンをクリックします。
「プロジェクト名 copy」としてターゲットが複製されるので、「プロジェクト名-cal」にリネームします。
ターゲットを複製すると、同時にスキーマも「プロジェクト名 copy」として作成されるので、こちらも「プロジェクト名-cal」にリネームします。
やらなくても大丈夫ですが、新しく作成したターゲットのProduct nameも同じように「プロジェクト名 copy」となっているので気になる場合はBuild settingsより直してください。
必要なフレームワークの設定
Calabash-iOSを利用するためには以下の2つのフレームワークが必要となります。
- calabash.framework
- CFNetwork.framework(iOS SDKに同梱)
以下のURLからcalabash.frameworkをダウンロードします。(執筆時点で最新はcalabash.framework-0.9.126.zip)
https://github.com/calabash/calabash-ios/downloads
解凍してできたcalabash.frameworkをプロジェクトに追加します。このとき、[Add to targets]にCalabashSample-calのみを選択するようにしてください。
CFNetowork.frameworkを追加すれば、必要なフレームワークの設定は終了です。
Build setiingsの変更
作成したターゲットプロジェクト名-calのBuild settingsを開き、以下の項目を変更します。
項目 | 設定値 |
---|---|
Other linker flags | -force_load "$(SRCROOT)/calabash.framework/calabash" -lstdc++ |
実行できるか確認する
スキーマにプロジェクト名-calを設定し、シミュレータで実行してみましょう。Xcodeのコンソールに以下のように表示されれば成功です。
2013-05-21 21:00:57.878 CalabashSample-cal[10040:c07] Creating the server: <LPHTTPServer: 0x721b2e0> 2013-05-21 21:00:57.880 CalabashSample-cal[10040:c07] simroot: /path-to-iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.1.sdk 2013-05-21 21:00:57.884 CalabashSample-cal[10040:c07] Started LPHTTP server on port 37265 2013-05-21 21:00:58.514 CalabashSample-cal[10040:2003] Bonjour Service Published: domain(local.) type(_http._tcp.) name(Calabash Server)
まとめ
今回はCalabash-iOSの導入まで解説しました。まだテストコードを実際に書いたりしてないのでなんとも言えません!次回はサンプルアプリを使用して実際にテストコードを書いてみたいと思います。